RL Baselines3 Zoo
背景
在开发强化学习项目时,需要对比不同算法的学习效率,以及对同一个算法进行调参。我在个人项目中也开发了类似的框架,但是功能并不全面。RL Baselines3 Zoo 是社区中提供的一套框架,功能全面。而且基于同一套框架,它人的模型大家都能够复现,这是非常关键的。
介绍
Stable Baselines3 强化学习 Agent 训练框架。
它提供了用于训练、评估 Agent、调整超参数、绘制结果和录制视频的脚本等功能。
此外,它还包括常见环境和 RL 算法的调整超参数集合,以及用这些设置训练的 Agent。
目标:
- 提供一个训练 Agent 的简化接口
- 对不同 RL 算法进行性能测试
- 给每个环境和 RL 算法提供调参后的超参数
训练 Agent
每个环境下的超参数定义在 hyperparameters/algo_name.yml 中。
如果环境在这个文件中存在,通过下面命令训练 agent:
python train.py --algo algo_name --env env_id
举例(带有 tensorboard 支持):
python train.py --algo ppo --env CartPole-v1 --tensorboard-log /tmp/stable-baselines/
每 10000 步对 Agent 进行评估,使用 10 轮进行评估(只使用一个评估环境):
python train.py --algo sac --env HalfCheetahBulletEnv-v0 --eval-freq 10000 --eval-episodes 10 --n-eval-envs 1
每 100000 步设置一个检查点:
python train.py --algo td3 --env HalfCheetahBulletEnv-v0 --save-freq 100000
连续学习(加载之前训练的 Agent,继续训练 5000 步):
python train.py --algo a2c --env BreakoutNoFrameskip-v4 -i rl-trained-agents/a2c/BreakoutNoFrameskip-v4_1/BreakoutNoFrameskip-v4.zip -n 5000
当使用 off-policy 算法的时候,可以在训练后保存 replay buffer:
python train.py --algo sac --env Pendulum-v0 --save-replay-buffer
replay buffer 将会在连续学习时被自动加载。
绘图脚本
绘图脚本(待添加文档,看 SB3 文档的 Result 小节):
- scripts/all_plots.py/scripts/plot_from_file.py:绘制 evaluation
- scripts/plot_train.py:绘制训练奖励
对 Fetch 环境与 HER 算法,绘制训练成功率(y轴)与时间步数(x轴)的关系图,移动窗口为 500 次:
python scripts/plot_train.py -a her -e Fetch -y success -f rl-trained-agents/ -w 500 -x steps
绘制 HalfCheetah 环境和 PyBullet 环境下,TQC, SAC 和 TD3 算法的奖励曲线:
python scripts/all_plots.py -a sac td3 tqc --env HalfCheetah Ant -f rl-trained-agents/
自定义环境
最简单的添加自定义环境的方法是编辑 utils/import_envs.py,把自己的环境注册进去。之后,需要在超参数文件 hyperparams/algo.yml 里添加一个小节。
欣赏训练好的 Agent
enjoy.py 的作用是在本地运行环境,以可视化的方式观看 Agent 的表现。运行完之后会弹一个窗口,在窗口里进行观看(欣赏,即 engoy 之意)。
训练好的 agent 在项目中以 submodule 形式存放,因此需要连 submodule 一起 clone:
git clone --recursive https://github.com/DLR-RM/rl-baselines3-zoo
如果训练好的 Agent 存在,可以通过下面方式看欣赏的行动:
python enjoy.py --algo algo_name --env env_id
举例,A2C 在 Breakout 的 5000 步行动:
python enjoy.py --algo a2c --env BreakoutNoFrameskip-v4 --folder rl-trained-agents/ -n 5000
实践记录,执行了之后半天没有反应。跑完了出来一个窗口,飞速运行打砖块游戏,玩得确实不错。 如果你自己训练的 Agent,需要这么做:
# exp-id 0 corresponds to the last experiment, otherwise, you can specify another ID
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 0
加载最佳模型(当使用 evaluation environment 的时候):
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-best
加载检查点(checkpoint),这里检查点的名字是 rl_model_10000_steps.zip:
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-checkpoint 10000
加载最近一个检查点:
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-last-checkpoint
视频录制
zoo3 里面没有提录视频的方法,zoo2 的文档里面有,补充过来:
python -m utils.record_video --algo ppo --env BipedalWalkerHardcore-v3 -n 1000
默认会加载 rl-trained-agents 里面预先训练好的模型。自己训练的模型放在 logs 里,录制自己训练的模型:
python -m utils.record_video --algo ppo --env BipedalWalkerHardcore-v3 -n 3000 -f logs
超参数 yaml 语法
实践记录
工程搭建
首先 Clone 工程:
git clone --recursive https://github.com/DLR-RM/rl-baselines3-zoo
使用 pipenv 进行项目管理,进入项目目录执行:
pipenv install
我用 Python3.7 进行安装,但执行上面命令的时候,会提示我 black 版本解析失败。最终通过下面命令将相关包都装上了:
pipenv install --skip-lock
但是通过上面方式安装是没有 pipfile.lock 的。
Windows 构建 box2d-py 失败
报错:
error: command 'swig.exe' failed: No such file or directory
参见文章:《Python can't install Box2D swig.exe failed with error code 1》
主要原因是 swig 这个软件没有安装,有两种方式进行安装,一个是去官网下载,下载完了添加 PATH 变量。另一种方式是采用 choco 包管理器进行安装。
SWIG 是啥?他是一个接口编译器,将 C、C++ 与脚本语言进行连接,官网地址。
网络资源
RL Baselines Zoo 上一代的 GitHub 首页